const handleRequestPayload = {
	insert,
	query,
	update,
};
// TODO 完善注释
/**
 * 处理新增接口参数
 * @param {Object} data - 新增数据对象
 * @returns {{sqlParams: string, labels: string, values: any[]}} - 返回一个对象
 *   - sqlParams: SQL插入字段字符串
 *   - labels: 占位符字符串
 *   - values: 对应的插入值数组
 */
function insert(data) {
	const sqlParams = Object.keys(data).join(',');
	const labels = new Array(Object.keys(data).length).fill('?').join(',');
	const values = Object.values(data);

	return {
		sqlParams,
		labels,
		values,
	};
}

/**
 * 处理更新接口参数
 * @param {Object} data - 更新参数对象
 * @returns {{sqlParams: string, values: any[]}} - 返回一个对象
 *   - sqlParams: SQL更新字段字符串
 *   - values: 对应的更新值数组
 */
function update(data) {
	const sqlParams = Object.keys(data)
		.map((item) => `${item} = ?`)
		.join(', ');
	const values = Object.values(data);
	return {
		sqlParams,
		values,
	};
}

/**
 * 处理查询接口参数
 * @param {Object} data - 查询参数对象
 * @param {string[]} fuzzyQuery - 模糊查询字段数组
 * @returns {{sqlParams: string, valueList: any[]}} - 返回一个对象
 *   - sqlParams: SQL查询条件字符串
 *   - valueList: 对应的查询值数组
 */
function query(data, fuzzyQuery = []) {
	const fuzzyQueryIndex = [];

	const sqlParams = Object.keys(data)
		.map((item, index) => {
			if (fuzzyQuery.includes(item)) {
				fuzzyQueryIndex.push(index);
				return `${item} like ?`;
			} else {
				return `${item} = ?`;
			}
		})
		.join(' and ');

	const valueList = Object.values(data).map((item, index) => {
		if (fuzzyQueryIndex.includes(index)) {
			return `%${item}%`;
		} else {
			return item;
		}
	});

	return {
		sqlParams,
		valueList,
	};
}

module.exports = handleRequestPayload;
